/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.kamen.gesplan;

import com.kamen.gesplan.vistes.*;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import junit.framework.TestCase;

/**
 *
 * @author Roger
 */
public class ControladoraVistes extends TestCase {
   
    public ControladoraVistes() {
        try {
            setTheme();
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(ControladoraVistes.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    private static void setTheme() throws UnsupportedLookAndFeelException {
        try {
        //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        //UIManager.setLookAndFeel("de.muntjak.tinylookandfeel.TinyLookAndFeel");

            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } 
        catch (ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } 
        catch (InstantiationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } 
        catch (IllegalAccessException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } 
        catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
     }
     
    /* Operació que fa que es torni a mostrar el menú principal */
    public void openMainMenu(Start main_view) {
        main_view.setVisible(true);
        main_view.setAction(0);
        main_view.setClosed(false);
    }
    
    /* Gestiona el comportament del menú principal */
    public void mainMenu() {
        Start main_view = new Start();
        
        int action;     // Ens indicarà quin botó ha premut l'ususari
        while(!main_view.isClosed()) {
            Sleep(10);
            action = main_view.getAction();
            switch(action) {
                case 1:     // Cas afegir empleat
                    main_view.dispose();
                    //addStaff();     // addStaff gestiona la finestra fins que és tancada
                    pestanyes();
                    openMainMenu(main_view); // un cop tancada, tornem al menú inicial
                    break;
                    
                case 2:     // Cas esborrar empleat
                    main_view.dispose();
                    //deleteStaff();
                    pestanyes();
                    openMainMenu(main_view);
                    break;
                    
                default:
                    break;  // No s'ha clicat cap botó
            }
        }
    }
    
    
    /* Mètode que crea i gestiona la vista d'afegir empleat */
    public void addStaff() {
        
        // Creem la vista
        Staff_Add view = new Staff_Add();
        
        // Carreguem els models pels combobox de la pantalla
        view.setModelRol(ControladorDomini.loadModel("Rol"));
        view.setModelSection(ControladorDomini.loadModel("Section"));
        
        // Mentre no tanquem la finestra, mirem si s'han afegit entrades
        while(!view.isClosed()) {
            Sleep(10);  // Es necessita un petit lapse de temps per a que li doni temps a llegir
            if (view.newInfo()) {
                
                // Si hi ha nova info, agafem del formulari els valors
                Add(view.getStaffName(), view.getSurname(), view.getDate_start(),
                    view.getDate_end(), view.getRol(), view.getSection(), 
                    view.getComments());
                
                view.setNewInfo(false);
            }
        }
        System.out.println("Hem tancat la finestra de crear empleat");
    }

    private void Add(String staffName, String surname, Date date_start, 
            Date date_end, String rol, String section, String comments) {
        
        // Cridem a la capa de domini, que s'encarrega d'afegir l'empleat
        ControladorDomini.Add(staffName, surname, date_start, date_end, rol, 
                              section, comments);
    }
    
    
     /* Mètode que crea i gestiona la vista d'eliminar empleat */
    public void deleteStaff() {
        
        // Creem la vista
        Staff_Delete view = new Staff_Delete();
        
        // Carreguem els cognoms dels empleats per passar-li a l'element de llista
        view.setList(ControladorDomini.loadModel("Staff"));
        view.setJList(ControladorDomini.loadModel("Staff"));
        
        // Mentre no tanquem la finestra, mirem si s'ha clicat el botó d'eliminar
        while(!view.isClosed()) {
            Sleep(10);  // Es necessita un petit lapse de temps per a que li doni temps a llegir
            if (view.newInfo()) {
               
                // Si hi ha nova info per part de la finestra, és que s'ha clicat a eliminar
                int res = Delete(view.getListSelected());
                view.infoMessage(res);
                view.setJList(ControladorDomini.loadModel("Staff"));
                view.setNewInfo(false);
            }
        }
        System.out.println("Hem tancat la finestra d'eliminar empleat");
    }
    
    private int Delete(String[] selected) {
        return ControladorDomini.delete(selected);
    }
    
    public void pestanyes() {
        
        // Creem la vista
        prova view = new prova();
        
        // Carreguem els models pels combobox de la pantalla
        view.setModelRol(ControladorDomini.loadModel("Rol"));
        view.setModelSection(ControladorDomini.loadModel("Section"));
        // Carreguem els cognoms dels empleats per passar-li a l'element de llista
        view.setList(ControladorDomini.loadModel("Staff"));
        view.setJList(ControladorDomini.loadModel("Staff"));
        
        // Mentre no tanquem la finestra, mirem si s'han afegit entrades
        while(!view.isClosed()) {
            Sleep(10);  // Es necessita un petit lapse de temps per a que li doni temps a llegir
            if (view.newInfo()) {
                
                System.out.println("Nova Info");
                // Si hi ha nova info, agafem del formulari els valors
                /*Add(view.getStaffName(), view.getSurname(), view.getDate_start(),
                    view.getDate_end(), view.getRol(), view.getSection(), 
                    view.getComments());*/
                
                view.setNewInfo(false);
            }
        }
        System.out.println("Hem tancat la finestra de crear empleat");
    }
    
    private void Sleep(int ms) {
         try {
            Thread.sleep(ms);
         } 
         catch (InterruptedException ex) {
            Logger.getLogger(ControladoraVistes.class.getName()).log(Level.SEVERE, null, ex);
         }
    }

    
    
}
